why implicit differentiation works